package com.wyz.module.comm.util;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.io.Serializable;

/**
 * @author 无涯子
 * @version 1.0
 * @date 2024/4/14 17:31:33
 */
@Data
@ApiModel("后端返回前端统一格式")
public class ResponseResult<T> implements Serializable {
    @ApiModelProperty("是否返回成功")
    private Boolean success;

    @ApiModelProperty("状态码")
    private Integer code;

    @ApiModelProperty("描述")
    private String message;

    @ApiModelProperty("返回数据")
    private T data;

    @ApiModelProperty("时间戳")
    private Long timestamp;

    public ResponseResult(){
        this.timestamp = System.currentTimeMillis();
    }

    /***
     * 返回成功
     * @param code 状态码
     * @param message 消息
     * @param data  数据
     * @return 返回前端信息
     * @author 无涯子
     * @date 2024/4/14 17:37:19
     */
    public static <T> ResponseResult<T> success(int code,String message,T data){
        ResponseResult<T> responseResult = new ResponseResult<>();
        responseResult.setSuccess(true);
        responseResult.setCode(code);
        responseResult.setMessage(message);
        responseResult.setData(data);
        return responseResult;
    }

    /***
     * 返回成功
     * @param code 状态码
     * @param message 消息
     * @return 返回前端信息
     * @author 无涯子
     * @date 2024/4/14 17:40:44
     */
    public static <T> ResponseResult<T> success(int code,String message) {
        return success(code, message, null);
    }

    /***
     * 返回成功
     * @param message 消息
     * @param data 数据
     * @return 返回前端信息
     * @author 无涯子
     * @date 2024/4/14 17:47:54
     */
    public static <T> ResponseResult<T> success(String message,T data) {
        return success(ResultCode.SUCCESS.getCode(), message, data);
    }

    /***
     * 返回成功
     * @param message 消息
     * @return 返回前端信息
     * @author 无涯子
     * @date 2024/4/14 17:46:48
     */
    public static <T> ResponseResult<T> success(String message) {
        return success(message, null);
    }

    /***
     * 返回成功
     * @param data 数据
     * @return 返回前端信息
     * @author 无涯子
     * @date 2024/4/14 17:45:23
     */
    public static <T> ResponseResult<T> success(T data) {
        return success(ResultCode.SUCCESS.getCode(), ResultCode.SUCCESS.getMessage(), data);
    }

    /***
     * 返回成功
     * @return 返回前端信息
     * @author 无涯子
     * @date 2024/4/14 17:43:44
     */
    public static <T> ResponseResult<T> success() {
        return success(null);
    }

    /***
     * 返回失败
     * @param code 状态码
     * @param message 消息
     * @param data 数据
     * @return 返回前端信息
     * @author 无涯子
     * @date 2024/4/14 17:49:28
     */
    public static <T> ResponseResult<T> fail(int code,String message,T data){
        ResponseResult<T> responseResult = new ResponseResult<>();
        responseResult.setSuccess(false);
        responseResult.setCode(code);
        responseResult.setMessage(message);
        responseResult.setData(data);
        return responseResult;
    }

    /***
     * 返回失败
     * @param code 状态码
     * @param message 消息
     * @return 返回前端信息
     * @author 无涯子
     * @date 2024/4/14 17:49:28
     */
    public static <T> ResponseResult<T> fail(int code,String message){
        return fail(code, message, null);
    }

    /***
     * 返回失败
     * @param message 消息
     * @param data 数据
     * @return 返回前端信息
     * @author 无涯子
     * @date 2024/4/14 17:49:28
     */
    public static <T> ResponseResult<T> fail(String message,T data){
        return fail(ResultCode.FAIL.getCode(), message, data);
    }

    /***
     * 返回失败
     * @param message 消息
     * @return 返回前端信息
     * @author 无涯子
     * @date 2024/4/14 17:49:28
     */
    public static <T> ResponseResult<T> fail(String message){
        return fail(ResultCode.FAIL.getCode(), message, null);
    }

    /***
     * 返回失败
     * @return 返回前端信息
     * @author 无涯子
     * @date 2024/4/14 17:49:28
     */
    public static <T> ResponseResult<T> fail(){
        return fail(ResultCode.FAIL.getMessage());
    }



}
